www.gusucode.com > HookAPI开发包(Win32 API函数截拦)源码程序 > HookAPI开发包(Win32 API函数截拦)源码程序/谷速代码-code/HookAPI1.7/samples/to_test/NetCryptCompressDll/compress.cpp
#include "stdafx.h" #include <malloc.h> #include "util.h" #include "const.h" #include "compress.h" char compress_dll_file[128]; CompressFilter::CompressFilter() { hModCompress =NULL; myCompressData =NULL; myDecompressData =NULL; m_pCompressInfo =NULL; m_compress_info_count =0; char init_file[128]; char temp[100], temp1[128]; if(g_szDllPath[0] ==0 || m_compress_info_count >0) return; //WriteLog("CompressInit..."); wsprintf(init_file, "%s\\compress.ini", g_szDllPath); if(GetPrivateProfileString("SETUP", "dll", "", temp1, sizeof(temp1), init_file) >0) wsprintf(compress_dll_file, "%s\\%s", g_szDllPath, temp1); m_compress_info_count =0; while(1) { wsprintf(temp, "APP%d", m_compress_info_count+1); if(GetPrivateProfileString("SETUP", temp, "", temp1, sizeof(temp1), init_file) <1) break; if(m_pCompressInfo ==NULL) m_pCompressInfo =(COMPRESS_INFO *)malloc(sizeof(COMPRESS_INFO)); else m_pCompressInfo =(COMPRESS_INFO *)realloc(m_pCompressInfo, sizeof(COMPRESS_INFO)*(m_compress_info_count+1)); if(m_pCompressInfo ==NULL) return; memset(&m_pCompressInfo[m_compress_info_count], 0, sizeof(COMPRESS_INFO)); strupr(temp1); strcpy(m_pCompressInfo[m_compress_info_count].app, temp1); wsprintf(temp, "IP%d", m_compress_info_count+1); GetPrivateProfileString("SETUP", temp, "", m_pCompressInfo[m_compress_info_count].ip, 16, init_file); wsprintf(temp, "PORT%d", m_compress_info_count+1); m_pCompressInfo[m_compress_info_count].server_port =GetPrivateProfileInt("SETUP", temp, 0, init_file); m_compress_info_count++; //WriteLog("compress:%d", m_compress_info_count); } if(compress_dll_file[0] ==0) return; if((hModCompress =LoadLibrary(compress_dll_file)) !=NULL) { myCompressData =(COMPRESSDATA)GetProcAddress((HMODULE)hModCompress, "CompressData"); myDecompressData =(DECOMPRESSDATA)GetProcAddress((HMODULE)hModCompress, "DecompressData"); } else WriteLog("LoadLibrary compress dll %s failed!", compress_dll_file); } CompressFilter::~CompressFilter() { if(hModCompress) { FreeLibrary((HINSTANCE)hModCompress); hModCompress =NULL; } if(m_pCompressInfo) { free(m_pCompressInfo); m_pCompressInfo =NULL; } m_compress_info_count =0; } // 检查是否需要压缩解压 BOOL CompressFilter::CompressCheck(char *remote_ip, int local_port, int remote_port) { int i; int port; //WriteLog("Compress check..."); for(i =0; i<m_compress_info_count; i++) { if(strcmp(m_pCompressInfo[i].app, g_szAppBaseName)==0 || strcmp(m_pCompressInfo[i].app, "ALL") ==0) { if(m_pCompressInfo[i].ip[0] ==0 || strcmp(m_pCompressInfo[i].ip, remote_ip) ==0) { if(m_pCompressInfo[i].server_port ==0) return true; if(m_pCompressInfo[i].local_port_type[0] =='S' || m_pCompressInfo[i].local_port_type[0] =='s') port =local_port; else port =remote_port; if(m_pCompressInfo[i].server_port ==port) return true; } } } return false; } // CompressData // return: 0 - data not changed, 1 - data compressed, <0 - failed int CompressFilter::CompressData(char *data, int data_len, char *data_compressed, int *pdata_compressed_len) { int ret =0; if(myCompressData) ret = myCompressData(data, data_len, data_compressed, pdata_compressed_len); return ret; } // DecompressData // return: 0 - data not changed, 1 - data decompressed, <0 - failed int CompressFilter::DecompressData(char *data, int data_len, char *data_decompressed, int *pdata_decompressed_len) { int ret =0; if(myDecompressData) ret = myDecompressData(data, data_len, data_decompressed, pdata_decompressed_len); return ret; }